
package com.cehome.cloudbox.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cehome.cloudbox.doman.dto.*;
import com.cehome.cloudbox.doman.vo.ProcInsPageQueryVo;
import com.cehome.cloudbox.doman.vo.ProcInsPageShowVo;
import com.cehome.cloudbox.doman.vo.ProcMyProcPageShowVo;
import com.cehome.cloudbox.doman.vo.ProcStateVo;


import java.util.List;

/**
 * <p>
 * 流程实例 服务类
 * </p>
 */
public interface IProcInstanceService {

    /**
     * 流程开始
     *
     * @param param 流程启动DTO
     * @return 流程状态DTO
     */
    ProcStateDto start(ProcStartDto param);

    /**
     * 流程撤回
     *
     * @param param 流程实例处理DTO
     * @return 流程状态DTO
     */
    ProcStateDto revoke(ProcInsHandleDto param);

    /**
     * 流程终止
     *
     * @param param 流程实例处理DTO
     * @return 流程状态DTO
     */
    ProcStateDto termination(ProcInsHandleDto param);

    /**
     * 流程取消
     *
     * @param param 流程实例处理DTO
     * @return 流程状态DTO
     */
    ProcStateDto cancel(ProcInsHandleDto param);


    /**
     * 流程审批历史
     *
     * @param procInsId 流程实例ID
     * @return 审批历史列表
     */
    List<ProcHistoryDto> approvalHistory(String procInsId);



    /**
     * 流程实例分页查询
     *
     * @param param 流程实例分页查询VO
     * @return 流程实例分页列表
     */
    Page<ProcInsPageShowVo> page(ProcInsPageQueryVo param);

    /**
     * 我发起的流程分页查询
     *
     * @param param 流程实例分页查询VO
     * @return 我发起的流程分页列表
     */
    Page<ProcMyProcPageShowVo> myProcess(ProcInsPageQueryVo param);

    /**
     * 获取流程实例状态和下一任务ID
     *
     * @param procInsId 流程实例ID
     * @return 流程实例状态和下一任务ID
     */
    ProcStateVo stateAndNextTaskId(String procInsId);


    /**
     * 流程审批历史
     *
     * @param busId 业务ID
     * @return 审批历史列表
     */
    List<ProcHistoryDto> getApprovalHistory(String busId);


}
